// function Observer(){
//     this.fns=[];
// }
// Observer.prototype={
//     //订阅
//     subscribe:function(fn){
//         this.fns.push(fn);
//     },
//     //退订
//     unsubscribe:function(fn){
//         this.fns=this.fns.filter(
//             function(el){
//                 if(el!==fn){
//                     return true;
//                 }
//             }
//         )
//     },
//     //发布
//     update:function(o,thisObj){
//         var scope=thisObj || window;
//         this.fns.forEach(
//             function(el){
//                 el.call(scope,o);
//             });
//     }
// }
// var o=new Observer;
// var f1=function(data){
//     console.log('Robbin: ' + data + ', 赶紧干活了！');
// };
// var f2 = function (data) {
//     console.log('Randall: ' + data + ', 找他加点工资去！');
// };
// var f3 = function (data) {
//     console.log('Li: ' + data + ', 我要揍他！');
// };
// //f1,f2,f3订阅了
// o.subscribe(f1);
// o.subscribe(f2);
// o.subscribe(f3);
// // //f1取消了订阅
// // o.unsubscribe(f1);
// // //发布
// o.update('Tom回来了');

// //输出结果
// //Randall: Tom回来了, 找他加点工资去！
// //Li: Tom回来了, 我要揍他！

class  Observer{
    constructor(){
        this.fn=[]
    }
    // 订阅
    subscribe(fn,name){
        this.fn.push({fn,name})
    }

    // 取消订阅
    unsubscribe(name){
        this.fn=this.fn.filter(item=>item.name!=name)
    }

    // 发布
    public(){
        this.fn.forEach(item=>{item.fn('全部听令')})
    }
}

let observer=new Observer();
observer.subscribe(function(data){
    console.log(data,'赵钱订阅了')
},'emit')
observer.subscribe(function(){
    console.log(data,'郑王订阅了')
},'sub')

// 取消订阅
// observer.unsubscribe('emit')
// 发布
observer.public()